home *** CD-ROM | disk | FTP | other *** search
/ The Programmer Disk / The Programmer Disk (Microforum).iso / xpro / pascal / pro23 / bas2pas.pas next >
Pascal/Delphi Source File  |  1987-05-28  |  4KB  |  103 lines

  1. PROGRAM BAS2PAS;
  2.  
  3. { Test program to read single precision real numbers from a BASIC  }
  4. { random access file into Turbo Pascal.                            }
  5. { D Adams                                         July 1984        }
  6. { Fairfield  CA                                                    }
  7.  
  8.  
  9. CONST
  10.      MAXREC = 12;
  11.  
  12. TYPE
  13.    PNUM = ARRAY[1..6] OF CHAR;   { Pascal real number a characters }
  14.    BNUM = ARRAY[1..4] OF CHAR;   { BASIC real number as characters }
  15.    DBASE = RECORD
  16.          N1 : BNUM;
  17.          N2 : BNUM;
  18.    END;
  19.  
  20. VAR
  21.    PARMFILE : FILE OF DBASE;
  22.    PARMREC  : DBASE;
  23.    BN1,BN2  : REAL;
  24.    PNR      : INTEGER;
  25.  
  26. PROCEDURE CVS(VAR PRL:REAL;  BRL: BNUM );
  27. { Procedure to convert BASIC 4 byte real to Turbo Pascal 6 byte real }
  28.  
  29. VAR
  30.    TMP         : REAL;               { Temperary Pascal Real }
  31.    C1,C2,C3,C4 : CHAR;
  32.    C           : PNUM ABSOLUTE TMP;  { String array with same address }
  33.  
  34. BEGIN
  35.  
  36. { Copy four bytes from file buffer.                                   }
  37.      C1:= COPY(BRL,1,1);
  38.      C2:= COPY(BRL,2,1);
  39.      C3:= COPY(BRL,3,1);
  40.      C4:= COPY(BRL,4,1);
  41.  
  42. { Change position of exponent byte and zero extra 2 bytes.            }
  43.      FILLCHAR(C[1],1,C4);
  44.      FILLCHAR(C[2],1,CHR(0));
  45.      FILLCHAR(C[3],1,CHR(0));
  46.      FILLCHAR(C[4],1,C1);
  47.      FILLCHAR(C[5],1,C2);
  48.      FILLCHAR(C[6],1,C3);
  49.  
  50. { Place value into passed parameter.                                  }
  51.      PRL:= TMP;
  52.  
  53. END;
  54.  
  55. BEGIN
  56.  
  57.      CLRSCR;
  58.  
  59.      ASSIGN(PARMFILE,'BASFILE.DAR'); RESET(PARMFILE);
  60.      WRITE('RECORD NUMBER: ');READLN(PNR);
  61.  
  62.      { Continue until record number outside range 1..MAXREC is chosen. }
  63.      WHILE PNR IN [1..MAXREC] DO
  64.  
  65.            BEGIN
  66.                 SEEK(PARMFILE,PNR-1);
  67.                 READ(PARMFILE,PARMREC);
  68.                 WITH PARMREC DO
  69.                      BEGIN
  70.                           { Call conversions }
  71.                           CVS(BN1,N1);
  72.                           CVS(BN2,N2);
  73.                           WRITELN(BN1:8:2,BN2:8:2);
  74.                      END;
  75.                 WRITE('RECORD NUMBER: '); READLN(PNR);
  76.            END;
  77.  
  78.      CLOSE(PARMFILE);
  79.  
  80. END.
  81.  
  82. { The above program will read a sample random access file     }
  83. { written by the basic program listed below. This file        }
  84. { contains two single presision real numbers (4 bytes each).  }
  85. { Each real is read in as a 4 character array and converted   }
  86. { into a six byte Turbo Pascal real number. The procedure     }
  87. { above should allow a Turbo Pascal program to read any       }
  88. { single precision real number from a BASIC random access     }
  89. { file.                                                       }
  90. {                                                             }
  91. { BASIC Program:                                              }
  92. {                                                             }
  93. { 10 OPEN"R",1,"BASFILE.DAR",8                                }
  94. { 20 FIELD 1, 4 AS N1$, 4 AS N2$                              }
  95. { 30 FOR I=1 TO 12                                            }
  96. { 40 LSET N1$= MKS$(1.1*I)                                    }
  97. { 50 LSET N2$= MKS$(100 + 1.1*I)                              }
  98. { 60 PUT 1,I                                                  }
  99. { 70 NEXT I                                                   }
  100. { 80 CLOSE                                                    }
  101. {                                                             }
  102. { Note: For conversion of Turbo Pascal Reals to BASIC see     }
  103. { PAS2BAS.BAS                                                 }